home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 June / PCWorld_2007-06_cd.bin / zabezpeceni / spyeraser / spyeraser.exe / {app} / SpyEraser.dll / 2110 / MENU.JS < prev    next >
Text File  |  2007-04-23  |  13KB  |  482 lines

  1. menuArray = new Array();
  2.  
  3.  
  4. function writeMenus()
  5. {
  6. for(var x=0; x<menuArray.length; x++)
  7. document.write('<style type="text/css">' + menuArray[x].getCSS() + '#dummy {position:absolute; visibility:hidden;}</style><div id="menuDescriptionDiv"></div>' + menuArray[x].getHTML());
  8.  
  9. document.write('<div id="menuDescriptionDiv"></div>');
  10. }
  11.  
  12.  
  13.  
  14. function activateMenus()
  15. {
  16. for(var x=0; x<menuArray.length; x++)
  17. menuArray[x].activate();
  18. hintObj = new divObject('menuDescriptionDiv', 'document.');
  19. hintObj.activate();
  20. }
  21.  
  22.  
  23. function hideAllMenus(){
  24.     for(var x=0; x<menuArray.length; x++)
  25.     menuArray[x].hide();
  26. }
  27. function hideAllSubMenus()
  28. {
  29. for(var x=0; x<menuArray.length; x++)
  30. menuArray[x].hideSubMenus();
  31. hideAllMenus();
  32. }
  33.  
  34.  
  35.  
  36. function menuSys(x, y, cellWidth, cellHeight, menuXOffset, menuYOffset, borderWidth, borderColour, classOff, classOn, bgColourOff, bgColourOn, subMenuRightPic, subMenuDownPic, subMenuRightPicOn, subMenuDownPicOn, direction, rememberHilight)
  37. {
  38. //Fix weird IE 5.00 bug where numeric arguments are passes as NaN
  39. this.id = menuArray.length;
  40. menuArray[this.id] = this;
  41.  
  42. this.cellWidth = cellWidth;
  43. this.cellHeight = cellHeight;
  44. this.menuXOffset = menuXOffset;
  45. this.menuYOffset = menuYOffset;
  46. this.borderWidth = borderWidth;
  47. this.borderColour = borderColour;
  48. this.classOff = classOff;
  49. this.classOn = classOn;
  50. this.bgColourOff = bgColourOff;
  51. this.bgColourOn = bgColourOn;
  52. this.subMenuPic = new Array(new Array(subMenuDownPic, subMenuDownPicOn), new Array(subMenuRightPic, subMenuRightPicOn));
  53. var preLoadR = new Image();
  54. preLoadR.src = subMenuRightPicOn;
  55. var preLoadD = new Image();
  56. preLoadD.src = subMenuDownPicOn;
  57. this.direction = direction;
  58. this.rememberHilight = rememberHilight;
  59.  
  60. this.left = x;
  61. this.top = y;
  62. this.topObj = this;
  63.  
  64. this.parent = false;
  65. this.menuWidth = 2*borderWidth + cellWidth;
  66.  
  67. this.div = new divObject('M' + this.id, 'document.');
  68.  
  69. this.cells = new Array();
  70. this.addCell = addCell;
  71.  
  72. this.activate = menuSysActivate;
  73. this.getHTML = menuSysGetHTML;
  74. this.getCSS = menuSysGetCSS;
  75. this.hideSubMenus = menuSysHideSubMenus;
  76.  
  77. this.name = 'M' + this.id;
  78. this.address = 'menuArray[' + this.id + ']';
  79. this.moveTo = menuSysMoveTo;
  80.  
  81. this.hide = new Function("this.hideSubMenus(); this.div.hide();");
  82. this.show = new Function("this.hideSubMenus(); this.div.show();");
  83. }
  84.  
  85.  
  86. function menuSysMoveTo(x, y)
  87. {
  88. this.left = x;
  89. this.top = y;
  90. this.div.moveTo(x, y);
  91. this.hideSubMenus();
  92. }
  93.  
  94.  
  95.  
  96. function menuSysActivate()
  97. {
  98. this.div.activate()
  99. this.div.resizeTo(this.topObj.menuWidth, this.cells.length*(this.topObj.borderWidth+this.topObj.cellHeight) + this.topObj.borderWidth);
  100. this.div.setBgColour(this.topObj.borderColour);
  101. for(var x=0; x<this.cells.length; x++)
  102. {
  103. this.cells[x].div.activate();
  104. this.cells[x].div.resizeTo(this.topObj.cellWidth, this.topObj.cellHeight);
  105. this.cells[x].div.setBgColour(this.topObj.bgColourOff);
  106. this.cells[x].div.moveTo(this.topObj.borderWidth, x*(this.topObj.borderWidth+this.topObj.cellHeight) + this.topObj.borderWidth);
  107. this.cells[x].div.show();
  108.  
  109. this.cells[x].clickDiv.activate();
  110. this.cells[x].clickDiv.resizeTo(this.topObj.cellWidth, this.topObj.cellHeight);
  111. this.cells[x].clickDiv.moveTo(this.topObj.borderWidth, x*(this.topObj.borderWidth+this.topObj.cellHeight) + this.topObj.borderWidth);
  112. this.cells[x].clickDiv.captureEvents('mouseover', this.address + '.cells[' + x + '].mouseover();');
  113. this.cells[x].clickDiv.captureEvents('mouseout', this.address + '.cells[' + x + '].mouseout();');
  114. this.cells[x].clickDiv.captureEvents('click', this.address + '.cells[' + x + '].click();');
  115. this.cells[x].clickDiv.show();
  116. //IE6 Fix - Watch out for Opera faking being IE
  117. if((browserVars.type.ie) && (typeof(this.cells[x].clickDiv.div.filter) != 'undefined'))
  118. {
  119. this.cells[x].clickDiv.setBgColour('red');
  120. this.cells[x].clickDiv.div.filter = 'Alpha(Opacity=0)';
  121. }
  122.  
  123. this.cells[x].onDiv.activate();
  124. this.cells[x].onDiv.resizeTo(this.topObj.cellWidth, this.topObj.cellHeight);
  125. this.cells[x].onDiv.moveTo(this.topObj.borderWidth, x*(this.topObj.borderWidth+this.topObj.cellHeight) + this.topObj.borderWidth);
  126. this.cells[x].onDiv.setBgColour(this.topObj.bgColourOn);
  127. this.cells[x].onDiv.hide();
  128.  
  129. if(this.cells[x].subMenu) this.cells[x].subMenu.activate();
  130. }
  131.  
  132. if((!this.parent) && (this.direction == 0))
  133. {
  134. for(var x=0; x<this.cells.length; x++)
  135. {
  136. this.cells[x].div.moveTo(x*(this.borderWidth+this.cellWidth) + this.borderWidth, this.borderWidth);
  137. this.cells[x].clickDiv.moveTo(x*(this.borderWidth+this.cellWidth) + this.borderWidth, this.borderWidth);
  138. this.cells[x].onDiv.moveTo(x*(this.borderWidth+this.cellWidth) + this.borderWidth, this.borderWidth);
  139. if((this.cells[x].subMenu) && (this.cells[x].showArrow))
  140. {
  141. this.cells[x].div.swapImage(this.cells[x].name + 'ArrowOff', this.subMenuPic[0][0]);
  142. this.cells[x].onDiv.swapImage(this.cells[x].name + 'ArrowOn', this.subMenuPic[0][1]);
  143. this.cells[x].direction = 0;
  144. }
  145. }
  146. this.div.resizeTo(this.cells.length*(this.borderWidth+this.cellWidth) + this.topObj.borderWidth, this.cellHeight + 2*this.borderWidth);
  147. }
  148. if(!this.parent)
  149. {
  150. this.div.moveTo(this.left, this.top);
  151. this.div.show();
  152. }
  153. }
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161. function menuSysGetHTML()
  162. {
  163.     var HTML = '<div id="' + this.name + '">';
  164.  
  165.     for(var x=0; x<this.cells.length; x++)
  166.     {
  167.         HTML += '<div id="' + this.cells[x].name + '" class="' + this.topObj.classOff + '">';
  168.         if((!this.cells[x].subMenu) || (!this.cells[x].showArrow))HTML += this.cells[x].textOff;
  169.         else HTML += '<table border="0" cellspacing="0" cellpadding="0" width="' + this.topObj.cellWidth + '"><tr><td width="100%" class="' + this.topObj.classOff + '">' + this.cells[x].textOff + '</td><td><img src="' + this.topObj.subMenuPic[1][0] + '" name="' + this.cells[x].name + 'ArrowOff"></td></tr></table>';
  170.         HTML += '</div>';
  171.  
  172.         HTML += '<div id="' + this.cells[x].name + 'On" class="' + this.topObj.classOn + '">';
  173.         if((!this.cells[x].subMenu) || (!this.cells[x].showArrow))HTML += this.cells[x].textOn;
  174.         else HTML += '<table border="0" cellspacing="0" cellpadding="0" width="' + this.topObj.cellWidth + '"><tr><td width="100%" class="' + this.topObj.classOn + '">' + this.cells[x].textOn + '</td><td><img src="' + this.topObj.subMenuPic[1][1] + '" name="' + this.cells[x].name + 'ArrowOn".></td></tr></table>';
  175.         HTML += '</div>';
  176.  
  177.         HTML += '<div id="' + this.cells[x].name + 'Click"> </div>';
  178.     }
  179.     HTML += '</div>';
  180.  
  181.     for(var x=0; x<this.cells.length; x++)
  182.         if(this.cells[x].subMenu) HTML += this.cells[x].subMenu.getHTML();
  183.  
  184.     return HTML;
  185. }
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193. function menuSysGetCSS()
  194. {
  195. var CSS = '#' + this.name + ', ';
  196.  
  197. for(var x=0; x<this.cells.length; x++)
  198. CSS += '#' + this.cells[x].name + ', #' + this.cells[x].name + 'On , #' + this.cells[x].name + 'Click, ';
  199.  
  200. for(var x=0; x<this.cells.length; x++)
  201. if(this.cells[x].subMenu) CSS += this.cells[x].subMenu.getCSS()
  202.  
  203. return CSS
  204. }
  205.  
  206.  
  207.  
  208.  
  209.  
  210. function addCell(text, action, description, subMenuName, showArrow)
  211. {
  212. this.cells[this.cells.length] = new cell(text, action, description, this, this.cells.length, subMenuName, showArrow)
  213. }
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222. function cell(text, action, description, parent, id, subMenuName, showArrow)
  223. {
  224. this.textOn = parseCode(text, parent.name + "C" + id, 1);
  225. this.textOff = parseCode(text, parent.name + "C" + id, 0);
  226.  
  227. this.description = false;
  228. if(typeof(description) != 'undefined')
  229. if(description.length != 0) this.description = description;
  230.  
  231. this.action = false;
  232. if(typeof(action) != 'undefined')
  233. if(action.length != 0) this.action = action;
  234.  
  235. this.parent = parent;
  236. this.id = id;
  237.  
  238. this.direction = 1;
  239. this.name = this.parent.name + 'C' + this.id
  240. this.div = new divObject(this.name, this.parent.div.divName + '.document.');
  241. this.onDiv = new divObject(this.name + 'On', this.parent.div.divName + '.document.');
  242. this.clickDiv = new divObject(this.name + 'Click', this.parent.div.divName + '.document.');
  243. this.mouseover = cellMouseover;
  244. this.mouseout = cellMouseout;
  245. this.click  = cellClick;
  246.  
  247. if(typeof(subMenuName) != 'undefined')
  248. {
  249. this.subMenu = new subMenu(this.parent, this.id);
  250. this.parent[subMenuName] = this.subMenu;
  251. this.subMenu.address = this.parent.address + '.' + subMenuName;
  252. }
  253. else this.subMenu = false;
  254.  
  255. if(typeof(showArrow) == 'undefined') showArrow = true;
  256. this.showArrow = showArrow;
  257.  
  258. this.showHint = showHint;
  259. this.hilight = cellHilight;
  260. this.unHilight = cellUnHilight;
  261. }
  262.  
  263. function cellHilight()
  264. {
  265. this.onDiv.show();
  266. this.div.hide();
  267. }
  268.  
  269.  
  270. function cellUnHilight()
  271. {
  272. this.div.show();
  273. this.onDiv.hide();
  274. }
  275.  
  276. function cellMouseover()
  277. {
  278. this.parent.hideSubMenus();
  279. this.hilight();
  280. if(this.subMenu) this.subMenu.show();
  281. if(this.description) this.showHint();
  282. }
  283.  
  284.  
  285. function cellMouseout()
  286. {
  287. hintObj.hide();
  288. if((!this.subMenu) || (!this.parent.topObj.rememberHilight)) this.unHilight();
  289.  
  290. }
  291.  
  292.  
  293. function cellClick()
  294. {
  295. if(this.action) eval(this.action);
  296. }
  297.  
  298.  
  299.  
  300. function subMenu(parent, id)
  301. {
  302. this.parent = parent;
  303. this.topObj = this.parent.topObj;
  304. this.id = id;
  305. this.address = '';
  306.  
  307. this.div = new divObject(this.parent.name + 'M' + this.id, 'document.');
  308.  
  309. this.cells = new Array();
  310. this.addCell = addCell;
  311.  
  312. this.activate = menuSysActivate;
  313. this.getHTML = menuSysGetHTML;
  314. this.getCSS = menuSysGetCSS;
  315. this.hideSubMenus = menuSysHideSubMenus;
  316. this.show = showSubMenu;
  317. this.shown = false;
  318.  
  319. this.name = this.parent.name + 'M' + this.id;
  320. }
  321.  
  322.  
  323.  
  324. function menuSysHideSubMenus()
  325. {
  326. for(var x=0; x<this.cells.length; x++)
  327. if(this.cells[x].subMenu)
  328. {
  329. this.cells[x].subMenu.shown = false;
  330. this.cells[x].unHilight();
  331. this.cells[x].subMenu.hideSubMenus();
  332. this.cells[x].subMenu.div.hide();
  333. }
  334. }
  335.  
  336.  
  337.  
  338. function showSubMenu()
  339. {
  340. var subMenu = this;
  341. var topOffset = 0;
  342. var leftOffset = 0;
  343.  
  344. if(this.topObj.direction)
  345. {
  346. while(subMenu.parent)
  347. {
  348. topOffset += subMenu.id*(this.topObj.cellHeight + this.topObj.borderWidth) + this.topObj.menuYOffset;
  349. leftOffset += this.topObj.menuWidth + this.topObj.menuXOffset - this.topObj.borderWidth;
  350. subMenu = subMenu.parent;
  351. }
  352. }
  353. else
  354. {
  355. while(subMenu.parent.parent)
  356. {
  357. topOffset += subMenu.id*(this.topObj.cellHeight + this.topObj.borderWidth) + this.topObj.menuYOffset;
  358. leftOffset += this.topObj.menuWidth + this.topObj.menuXOffset - this.topObj.borderWidth;
  359. subMenu = subMenu.parent;
  360. }
  361.  
  362. topOffset += this.topObj.cellHeight + this.topObj.borderWidth;
  363. leftOffset += subMenu.id*(this.topObj.cellWidth + this.topObj.borderWidth)
  364. }
  365.  
  366. topOffset += this.topObj.top;
  367. leftOffset += this.topObj.left;
  368.  
  369. this.shown = true;
  370. this.div.moveTo(leftOffset, topOffset);
  371. this.div.show();
  372. }
  373.  
  374.  
  375.  
  376.  
  377. function showHint()
  378. {
  379. var subMenu = this.parent;
  380. var topOffset = 0;
  381. var leftOffset = 0;
  382. var cellAndBorderWidth = subMenu.topObj.cellWidth + subMenu.topObj.borderWidth;
  383. var cellAndBorderHeight = subMenu.topObj.cellHeight + subMenu.topObj.borderWidth;
  384.  
  385. if(subMenu.topObj.direction)
  386. {
  387. while(subMenu.parent)
  388. {
  389. topOffset += subMenu.id * cellAndBorderHeight + subMenu.topObj.menuYOffset;
  390. leftOffset += subMenu.topObj.menuWidth + subMenu.topObj.menuXOffset - subMenu.topObj.borderWidth;
  391. subMenu = subMenu.parent;
  392. }
  393. topOffset += this.id * cellAndBorderHeight;
  394. }
  395. else
  396. {
  397. while(subMenu.parent.parent)
  398. {
  399. topOffset += subMenu.id * cellAndBorderHeight + subMenu.topObj.menuYOffset;
  400. leftOffset += subMenu.topObj.menuWidth + subMenu.topObj.menuXOffset - subMenu.topObj.borderWidth;
  401. subMenu = subMenu.parent;
  402. }
  403.  
  404. if(!this.parent.parent)
  405. {
  406. leftOffset += this.id * cellAndBorderWidth;
  407. }
  408. else
  409. {
  410. topOffset += (this.id+1) * cellAndBorderHeight;
  411. leftOffset += subMenu.id * cellAndBorderWidth;
  412. }
  413. }
  414. topOffset += subMenu.topObj.top;
  415. leftOffset += subMenu.topObj.left + subMenu.topObj.menuWidth;
  416.  
  417.  
  418. hintObj.write('<span class="menuDescriptionText">' + this.description + '</span>');
  419. hintObj.moveTo(leftOffset, topOffset);
  420. hintObj.show();
  421. }
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439. function parseCode(text, name, on)
  440. {
  441. var numImages = text.substrCount("[MOUSEOVER]");
  442. if(numImages == 0) return text;
  443.  
  444. var imageArray = new Array();
  445. for(x=0; x<numImages; x++)
  446. {
  447. imageArray[x] = (text.substring(text.indexOf('[MOUSEOVER]') + 11, text.indexOf('[/MOUSEOVER]'))).split(' ');
  448. text = text.substring(0, text.indexOf('[MOUSEOVER]')) +  '<img src="' + imageArray[x][on] + '">' + text.substr(text.indexOf('[/MOUSEOVER]') + 12);
  449. }
  450.  
  451. return text;
  452. }
  453.  
  454.  
  455. function strReplace(needle, str)
  456. {
  457. var myStr = this.toString();
  458. var tempArray = myStr.split(needle);
  459. var newStr = '';
  460.  
  461. for(var x=0; x<tempArray.length; x++)
  462. {
  463. newStr += tempArray[x];
  464. if(x != tempArray.length-1) newStr += str;
  465. }
  466.  
  467. return newStr;
  468. }
  469.  
  470.  
  471. function substrCount(needle)
  472. {
  473. var myStr = this.toString();
  474. var count = 0;
  475. for(var x=0; x<myStr.length; x++)
  476. if(myStr.indexOf(needle, x) == x) count++;
  477.  
  478. return count;
  479. }
  480.  
  481. String.prototype.strReplace = strReplace;
  482. String.prototype.substrCount = substrCount;